/*
 * 组合题模板：仅描述“动作类型”和“文本模板”。
 * 具体的行号、词汇、区块位置信息由服务器在运行时
 * 读取 ex3.html 动态填充。
 *
 * 三大类：
 *  - NAV  : 跳转/定位类（跳行、行首/行尾、/搜索并 n/N）
 *  - CLIP : 复制/剪切/删除/搜索类（精确到“第A行到第B行前面”）
 *  - EDIT : 内容编辑/替换类
 */

const NAV_TEMPLATES = [
  // 跳到行并移动到行尾
  { id: 'nav_goto_end',     category: 'NAV',
    text: '跳转到第 {line} 行，并把光标移动到行尾。' },

  // 跳到行并移动到行首
  { id: 'nav_goto_begin',   category: 'NAV',
    text: '跳转到第 {line} 行，并把光标移动到行首。' },

  // 使用 /pattern 快速定位，再用 n 或 N 导航
  { id: 'nav_search_next',  category: 'NAV',
    text: '使用 “/{pattern}” 搜索定位到第一个匹配处，再跳到下一个匹配。' },

  // 顶/尾
  { id: 'nav_top_bottom',   category: 'NAV',
    text: '先跳到文件顶部，再跳到文件底部。' }
];

const CLIP_TEMPLATES = [
  // 复制一行到另一行之前
  { id: 'clip_copy_before', category: 'CLIP',
    text: '复制第 {fromLine} 行，并粘贴到第 {toLine} 行的前面（不改变第 {toLine} 行内容）。' },

  // 复制一段（起止行）到某行之后
  { id: 'clip_copy_block_after', category: 'CLIP',
    text: '复制第 {startLine}–{endLine} 行这一段，粘贴到第 {toLine} 行之后。' },

  // 删除一行
  { id: 'clip_delete_line', category: 'CLIP',
    text: '删除第 {line} 行。' },

  // 剪切一行到另一行前
  { id: 'clip_move_line_before', category: 'CLIP',
    text: '把第 {fromLine} 行剪切并移动到第 {toLine} 行前面。' }
];

const EDIT_TEMPLATES = [
  { id: 'fix_welcome', category: 'EDIT', text: '将所有 “Welcom” 替换为 “Welcome”。' },
  { id: 'fix_editor', category: 'EDIT', text: '将所有 “editr” 和 “edtir” 替换为 “editor”。' },
  { id: 'fix_powerful', category: 'EDIT', text: '将所有 “powrful” 替换为 “powerful”。' },
  { id: 'fix_practice', category: 'EDIT', text: '将所有 “practis” 替换为 “practice”。' },
  { id: 'fix_navigation', category: 'EDIT', text: '将所有 “navgation” 替换为 “navigation”。' },
  { id: 'fix_intro_heading', category: 'EDIT', text: '将 “Into” 修改为 “Intro”。' },
  { id: 'fix_installation', category: 'EDIT', text: '将 “Instalation” 修改为 “Installation”。' },
  { id: 'fix_motions', category: 'EDIT', text: '将 “Motons” 修改为 “Motions”。' },
  { id: 'fix_editing', category: 'EDIT', text: '将 “Edting” 修改为 “Editing”。' },
  { id: 'fix_search', category: 'EDIT', text: '将 “Serach” 修改为 “Search”。' },
  { id: 'fix_replace', category: 'EDIT', text: '将 “Replce” 修改为 “Replace”。' },
  { id: 'fix_macros', category: 'EDIT', text: '将 “Macors” 修改为 “Macros”。' },
  { id: 'fix_efficiency', category: 'EDIT', text: '将所有 “efficency” 替换为 “efficiency”。' },
  { id: 'fix_the', category: 'EDIT', text: '将所有 “teh” 替换为 “the”。' },
  { id: 'fix_common', category: 'EDIT', text: '将所有 “commen” 替换为 “common”。' },
  { id: 'normalize_vim_case', category: 'EDIT', text: '将正文中的 “VIM” 或 “vim” 统一为 “Vim”（不要修改代码块内文本）。' }
];

/**
 * 组合规则：
 *  R   -> 3 步  （覆盖全部3 类）
 *  SR  -> 4 步  （覆盖3类基础上，在CLIP，EDIT抽1题）
 *  SSR -> 5 步  （覆盖3类，在CLIP，EDIT抽2题）
 */
const COMPOSITION_RULES = {
  // R  -> 3 步（覆盖全部 3 类：NAV=1, CLIP=1, EDIT=1）
  R:  { steps: 3, requireCategories: 3, minPerCategory: { NAV: 1, CLIP: 1, EDIT: 1 } },
  // SR -> 4 步（覆盖 3 类，且 CLIP、EDIT 各至少 1 题，剩余 1 题任意）
  SR: { steps: 4, requireCategories: 3, minPerCategory: { NAV: 1, CLIP: 1, EDIT: 1 } },
  // SSR-> 5 步（覆盖 3 类，CLIP 和 EDIT 各 2 题，NAV 1 题）
  SSR:{ steps: 5, requireCategories: 3, minPerCategory: { NAV: 1, CLIP: 2, EDIT: 2 } }
};

module.exports = {
  NAV_TEMPLATES,
  CLIP_TEMPLATES,
  EDIT_TEMPLATES,
  COMPOSITION_RULES
};
